#include <iostream>
#include "CmdLineParser.h"
#include "FileAdmin.h"
#include "Lista.h"
#include "Archivo.h"
#include <fstream>

using namespace std;


int main(int argc,char**argv)
{
    /*ofstream arch;
    arch.open("archivo.lzp",ios::binary);
    unsigned int n=40;
    arch.write(reinterpret_cast<char*>(&n),4);

    n=13;
    arch.write(reinterpret_cast<char*>(&n),4);
    char palabra[]="escultura.doc";
    arch.write(reinterpret_cast<char*>(&palabra),13);
    n=5;
    arch.write(reinterpret_cast<char*>(&n),4);

    n=11;
    arch.write(reinterpret_cast<char*>(&n),4);
    char palabra2[]="leandro.txt";
    arch.write(reinterpret_cast<char*>(&palabra2),11);
    n=11;
    arch.write(reinterpret_cast<char*>(&n),4);
    arch.close();*/

    /*Lista<Archivo*> archivos;
    Archivo *arch1=new Archivo("estructura.doc",5,0);
    archivos.insertar(arch1);
    Archivo *arch2=new Archivo("leandro.txt",20,0);
    archivos.insertar(arch2);

    FileAdmin fadm;
    fadm.actualizarAreaAdministrativa(27,&archivos,"archivo.lzp");
    delete(arch1);
    delete(arch2);*/

	CmdLineParser c;
	if(c.Parse(argc,argv)<0)
		cout<<"Error en los argumentos de entrada"<<endl;
	else
	{
		if(((string)argv[1])=="-l")
		{
		    FileAdmin fad;
		    Lista<Archivo*>*lista=fad.listar((string)argv[2]);
		    cout<<"Archivos contenidos en "<<argv[2]<<endl;
		    for(int x=0;x<lista->length();x++)
                cout<<lista->recuperar(x)->getNombre()<<endl;
		}
		else
		{
            if(((string)argv[1])=="-a")
            {
                Lista<Archivo*> archs;
                for(int x=2;x<argc-1;x++)
                {
                    Archivo *nuevo=new Archivo(argv[x],0,1);
                    archs.insertar(nuevo);
                }
                FileAdmin fadm;
                Lista<Archivo*> *acomprimir=fadm.limpiarParaComprimir(&archs,argv[argc-1]);
                for(int x=0;x<acomprimir->length();x++)
                {
                    cout<<"comprimir "<<acomprimir->recuperar(x)->getNombre()<<endl;

                }
                fadm.actualizarAreaAdministrativa(55,acomprimir,argv[argc-1]);
                while(!archs.esVacia())
                {
                    delete archs.recuperar(0);
                    archs.eliminar(0);
                }
                delete acomprimir;
            }
            if(((string)argv[1])=="-x")
            {
                Lista<Archivo*> archs;
                for(int x=2;x<argc-1;x++)
                {
                    Archivo *nuevo=new Archivo(argv[x],0,0);
                    archs.insertar(nuevo);
                }
                FileAdmin fadm;
                Lista<Archivo*> *adescomprimir=fadm.limpiarParaDescomprimir(&archs,argv[argc-1]);
                for(int x=0;x<adescomprimir->length();x++)
                {
                    cout<<"descomprimir "<<adescomprimir->recuperar(x)->getNombre()<<endl;

                }
            }
		}
	}
	return 0;
}
